﻿#ifndef _UDP_H_
#define _UDP_H_

#include <stdint.h>
#include "ipaddr.h"
#include "pktbuf.h"
#include "dgram.h"

#pragma pack(1)

// udp包头结构
typedef struct _udp_hdr_t
{
    uint16_t src_port;
    uint16_t dest_port;
    uint16_t total_len;
    uint16_t checksum;
} udp_hdr_t;

typedef struct _udp_pkt_t
{
    udp_hdr_t hdr;
    uint8_t data[1];
} udp_pkt_t;

typedef struct _udp_from_t
{
    ipaddr_t ip;
    uint16_t port;
}udp_from_t;

#pragma pack()

net_err_t udp_out(ipaddr_t *dest_ip, uint16_t dport, ipaddr_t *src_ip, uint16_t sport, pktbuf_t *buf);
net_err_t udp_in(pktbuf_t *buf, ipaddr_t *src, ipaddr_t *dst);
dgram_t *udp_find(ipaddr_t *src_ip, uint16_t sport, ipaddr_t *dst_ip, uint16_t dport);
void udp_pkt_ntoh(udp_pkt_t *pkt);


#endif